package com.building18.mapper;

import com.building18.pojo.Role;
import com.building18.pojo.vo.RoleVO;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface RoleMapper {
    /**
     * 获取所有角色信息
     * @return 返回包含所有角色信息的RoleVO列表
     */
    @Select("select id, role_name,role_code from sys_role")
    List<RoleVO> getRoles();

    /**
     * 中间表中根据用户ID获取该用户的所有角色
     * @param id 用户ID
     * @return 返回包含指定用户角色的RoleVO列表
     */
    @Select("select id, user_id, role_id from sys_role_user where user_id = #{id}")
    List<RoleVO> getRolesByUid(Integer id);

    /**
     * 中间表中根据用户ID删除该用户的所有角色关联
     * @param uid 用户ID
     * @return 返回受影响的行数
     */
    @Delete("delete from sys_role_user where user_id = #{uid}")
    Integer deleteRolesByUid(Integer uid);

    /**
     * 中间表中为用户新增新的角色关联
     * @param uid 用户ID
     * @param roleIds 角色ID列表
     * @return 返回受影响的行数
     */
    Integer saveNewRoles(@Param("uid") Integer uid, @Param("ids") List<Integer> roleIds);

    /**
     * 中间表中根据用户ID查询角色信息
     * @param id 用户ID
     * @return 返回包含指定用户角色的RoleVO列表
     */
    @Select("select id, user_id, role_id from sys_role_user where user_id = #{id}")
    List<RoleVO> selectRoleById(Integer id);

    /**
     * 查询所有角色信息
     * @return 返回包含所有角色信息的RoleVO列表
     */
    @Select("select id, role_name, role_code from sys_role")
    List<RoleVO> selectRoles();


    @Delete("delete from sys_role where id = #{id}")
    Integer deleteRole(Integer id);

    @Update("update sys_role set role_name=#{roleName},role_code=#{roleCode},description=#{description},update_time=#{updateTime} where id=#{id}")
    Integer updateRole(Role role);

    @Select("select * from sys_role where id = #{id}")
    Role selectRole(Integer id);
}
